//
//  JKFilePathOperationCategory.m
//  JKOCFilePathOperation
//
//  Created by 王冲 on 2018/4/17.
//  Copyright © 2018年 希爱欧科技有限公司. All rights reserved.
//

/*
 - 1、Home目录(应用程序包)
   - 整个应用程序各文档所在的目录,包含了所有的资源文件和可执行文件
 - 2、Documents
   - 保存应用运行时生成的需要持久化的数据，iTunes同步设备时会备份该目录
   - 需要保存由"应用程序本身"产生的文件或者数据，例如: 游戏进度，涂鸦软件的绘图
   - 目录中的文件会被自动保存在 iCloud
   - 注意: 不要保存从网络上下载的文件，否则会无法上架!
 3、tmp
   - 保存应用运行时所需要的临时数据或文件，"后续不需要使用"，使用完毕后再将相应的文件从该目录删除。
   - 应用没有运行，系统也可能会清除该目录下的文件
   - iTunes不会同步备份该目录
   - 重新启动手机, tmp 目录会被清空
   - 系统磁盘空间不足时，系统也会自动清理
 4、Library/Cache：保存应用运行时生成的需要持久化的数据，iTunes同步设备时不备份该目录。一般存放体积大、不需要备份的非重要数据
   - 保存临时文件,"后续需要使用"，例如: 缓存的图片，离线数据（地图数据）
   - 系统不会清理 cache 目录中的文件
   - 就要求程序开发时, "必须提供 cache 目录的清理解决方案"
 5、Library/Preference：保存应用的所有偏好设置，IOS的Settings应用会在该目录中查找应用的设置信息。iTunes
   - 用户偏好，使用 NSUserDefault 直接读写！
   - 如果想要数据及时写入硬盘，还需要调用一个同步方法 synchronize()
   UserDefaults是一种存轻量级的数据
   //取值
   #define UserDefaultObject(A) [[NSUserDefaults standardUserDefaults]objectForKey:A]
   //存值(可变的值不可以存)
   #define UserDefaultSetValue(B,C) [[NSUserDefaults standardUserDefaults]setObject:B forKey:C]
   //存BOOL值
   #define UserDefaultBool(D,E)  [[NSUserDefaults standardUserDefaults]setBool:D forKey:E]
   #define  Synchronize          [[NSUserDefaults standardUserDefaults]synchronize]
 */

#import "JKFilePathOperationCategory.h"
@interface JKFilePathOperationCategory ()
{
    
}
@end

@implementation JKFilePathOperationCategory

+(NSString *)customFilePathName:(FilePath)name customPath:(NSString *)path{
    switch (name) {
        case 0:
            return [NSString stringWithFormat:@"/%@",path];
            break;
        case 1:
            return [NSString stringWithFormat:@"/Documents/%@",path];
            break;
        case 2:
            return [NSString stringWithFormat:@"/Library/%@",path];
            break;
        case 3:
            return [NSString stringWithFormat:@"/Library/Caches/%@",path];
            break;
        case 4:
            return [NSString stringWithFormat:@"/tmp/%@",path];
            break;
        default:
            break;
    }
    return nil;
}

#pragma mark 获取根目录Home
+(NSString *)jKHomeDirectory{
    
    NSString *filePath = NSHomeDirectory();
    return filePath;
}

#pragma mark 获取 Documents
+(NSString *)jKDocuments{
    
    NSString *filePath= [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    return filePath;
}

#pragma mark 获取 Caches
+(NSString *)jKCaches{
    
    NSString *filePath= [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Caches"];
    return filePath;
}

#pragma mark 获取 Library
+(NSString *)jKLibrary{
    
    NSString *filePath= [NSHomeDirectory() stringByAppendingPathComponent:@"/Library"];
    return filePath;
}

#pragma mark 获取 tmp
+(NSString *)jKTmp{
    
    NSString *filePath= [NSHomeDirectory() stringByAppendingPathComponent:@"/tmp"];
    return filePath;
}

#pragma mark 获取某个文件下的所有文件的名字
/**
 folderNmae:文件夹的名字
 */
-(NSArray *)jKGetAllFileNames:(NSString *)folderName
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    // 取得一个目录下得所有文件名
    NSArray *files = [fileManager subpathsAtPath:[self jKCreateDir:folderName]];
    //NSLog(@"pdf名字的数量=%ld 数组=%@",files.count,files);
    
    return files;
}

#pragma mark 使用 NSHomeDirectory() 创建文件目录
/**folderNmae:文件夹的名字*/
- (NSString *)jKCreateDir:folderNmae{
    
    // NSHomeDirectory()：应用程序目录， Caches、Library、Documents目录文件夹下创建文件夹(蓝色的)
    // @"Documents/JKPdf"
    NSString *filePath=[NSHomeDirectory() stringByAppendingPathComponent:folderNmae];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL isDir = NO;
    // fileExistsAtPath 判断一个文件或目录是否有效，isDirectory判断是否一个目录
    BOOL existed = [fileManager fileExistsAtPath:filePath isDirectory:&isDir];
    
    if ( !(isDir == YES && existed == YES) ) {
        
        // 不存在的路径才会创建
        [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
    }
    return filePath;
}

#pragma mark 删除文件夹或者文件的路径
- (void)jKRemovefolder:(NSString *)filePathName { // filePath: 文件/目录的路径
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:filePathName];
    BOOL isDir = NO;
    // fileExistsAtPath 判断一个文件或目录是否有效，isDirectory判断是否一个目录
    BOOL existed = [fileManager fileExistsAtPath:filePath isDirectory:&isDir];
    
    if ( !(isDir == YES && existed == YES) ) {
        
        // 不存在的路径才会创建
        return;
    }
    //文件夹
    [fileManager removeItemAtPath:filePath error:nil];
}

#pragma mark 删除文件夹或者文件的路径
- (void)jKRemovefile:(NSString *)filePathName {
    // filePath: 文件/目录的路径
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:filePathName];
    //移除文件
    [fileManager removeItemAtPath:filePath error:nil];
}

#pragma mark 读取某个文件
- (NSData *)jKReadfile:(NSString *)filePath { // filePath: 文件/目录的路径
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    // 读取某个文件
    NSData *data = [fileManager contentsAtPath:filePath];
    return data;
}

@end
